#ifndef ABSUI_UI_FACTORY_HPP
#define ABSUI_UI_FACTORY_HPP

#include "AbsUI/AbsUiConfig.hpp"
#include <string>

namespace Storage { class ConnectionConfig; }

namespace AbsUI
{

class MainWindow;
class ConnectionConfigurationWidget;
class ProjectBrowserWidget;

/// @ingroup AbsUI
/// @brief It provides the interface of the UI factory classes. Depending on the framework used for UI, the instances of 
///		this factory will created different kinds of UI objects.
class ABSUI_API UIFactory
{
public:
	/// @brief Dummy destructor (just for avoiding potential memory leaks).
	virtual ~UIFactory();

	/// @brief Used to create the main window of the application.
	virtual MainWindow* createMainWindow() = 0;

	/// @brief It creates connection configuration widgets based on a provided connection type name.
	virtual ConnectionConfigurationWidget* createConnConfigWidget( const std::string& typeName) = 0;

	/// @brief It creates a project browser based on a provided connection type name.
	virtual ProjectBrowserWidget* createProjectBrowserWidget( const Storage::ConnectionConfig& connectionConfig) = 0;
};

} // namespace AbsUI

#endif // ABSUI_UI_FACTORY_HPP
